#ifndef TCP_SERVER_MYSQLCONNECTION_H
#define TCP_SERVER_MYSQLCONNECTION_H

#include "../base/noncopyable.h"
#include "../base/thread/Mutex.h"
#include "../base/log/Logging.h"

#include <mysql.h>
#include <bits/stdc++.h>
#include <vector>

class MySQLConnection : muduo::noncopyable {
public:
    typedef std::vector<string> fields;
    typedef std::vector<fields> fieldsVector;

    /**
     * 初始化数据库连接
     * @param database 连接的数据库
     * @param username 用户名
     * @param password 密码
     * @param host 主机号
     * @param port 端口号
     */
    MySQLConnection(
            const string &database,
            const string &username,
            const string &password,
            const string &host = "localhost",
            int port = 3306
    );

    /**
     * 初始化数据库连接
     * @param connectionName 连接名称, 用于标识当前连接
     * @param database 连接的数据库
     * @param username 用户名
     * @param password 密码
     * @param host 主机号
     * @param port 端口号
     */
    MySQLConnection(
            string connectionName,
            const string &database,
            const string &username,
            const string &password,
            const string &host = "localhost",
            int port = 3306
    );

    ~MySQLConnection();

    bool query(const string &sql);

    fieldsVector select(const string &sql);

private:

    string connectionName_;
    string database_;

    MYSQL connection;
    MutexLock mutex_;
};


#endif //TCP_SERVER_MYSQLCONNECTION_H
